# 作业： 1、编写一个学生方法，产生一堆学生对象（姓名），传入形参控制学生生成数量
import random

def students(count):
    student_list = []
    for i in range(count):
      student_name = f'张{random.randint(1,100)}丫'
      student_list.append(student_name)
    print(student_list)
students(3)

# 2、创建一个方法，用来生成普通人必备的信息：姓名、年龄、住址、身份证号、手机号，随机生成20个写入personinfo.txt里 格式：姓名：xxx 年龄：xxx 住址：xxx 身份证号：xxx
def info_people(count):
    name_list = ['张旭同','臧淼','田雨鑫','小杜','边远']
    address_list = ['阜新','沈阳','锦州','鞍山','铁岭','辽阳','大连','本溪']
    with open('personinfo.txt', 'w', encoding='utf-8') as f:
        for i in range(count):
            name = random.choice(name_list)
            age = random.randint(10,90)
            address = random.choice(address_list)
            id_card = ''.join(str(random.randint(0, 9)) for _ in range(18))
            tel = ''.join(str(random.randint(0, 9)) for _ in range(11))
            person_info = f'姓名：{name} 年龄：{age} 住址：{address} 身份证号：{id_card} 手机号：{tel}\n'
            f.write(person_info)
            print(person_info)
info_people(20)


# 3、文本 student.txt中包含下面的内容 zhangshan:30 lisi:50 wangwu:60 lifei:70 期望能够统计出其中的内容，以dict的形式保存
# 例如： {"zhangshan":30,"lisi":50,"wangwu":60,"lifei":70}

def get_info():
    info = {}
    with open('student.txt', 'r', encoding='utf-8') as f:
        st_info = f.read()
        st = st_info.split(' ')
        for s in st:
            name,score = s.split(':')
            info[name] = int(score)
    return info
infos = get_info()
print(infos)

def read_student_scores():
    scores = {}
    try:
        with open('student.txt', 'r', encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                if not line:
                    continue
                name,score = line.split(':')
                scores[name] = int(score)
    except FileNotFoundError:
        print("文件不存在")
    return scores
student_scores = read_student_scores()
print(student_scores)









# 4、给你一个 非空 整数数组 nums ，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素
def once_nums(nums):
    set_nums = set(nums)
    return sum(set_nums) * 2 - sum(nums)
print(once_nums([1,2,3,4,2,3,4]))
print(once_nums([1,1,2,2,3,3,7]))



# 5、输入：["1","a","b","3","5","8","_"] 想要提取里面得数字，并保存到一个列表中

def get_int(nums):
    num_int = []
    for item in nums:
        if item.isdigit():
            num_int.append(item)
    return num_int
list_num = ["1","a","b","3","5","8","_"]
print(get_int(list_num))




# 6、写函数,函数接收的4个参数分别是:姓名,别(默认为男),年龄,地址
# 用户通过input输入这4个内容(支持持续输入,Q或q退出)                                                                                                                            别(默认为男),年龄,地址 用户通过input输入这4个内容(支持持续输入,Q或q退出),
# 并传递给函数，函数接收到这些内容,将其追加到student_msg文件中

def add_people(name,sex,age,address):
        infos = f"姓名：{name},性别：{sex},年龄：{age},地址{address}"
        with open('student_msg', 'a', encoding='utf-8') as f:
            f.write(infos)
            print(f"{infos}---已保存")

def input_people():
    print("请输入信息（按q退出）")
    while True:
        name = input("请输入姓名")
        if name == 'q'or name == 'Q':
            print("已退出")
            break
        sex = input("请输入性别",)
        if not sex:
            sex = '男'
        if sex == 'q' or sex == 'Q':
            print("已退出")
            break
        age = input("请输入年龄")
        if age == 'q' or age == 'Q':
            print("已退出")
            break
        address = input("请输入地址")
        if address == 'q' or address == 'Q':
            print("已退出")
            break
        add_people(name,sex,age,address)
input_people()




# 7、打印功能菜单、添加学生信息、删除学生信息、修改学生信息、显示学生信息、退出系统，并且需要接收用户的输入，在根据输入内容调用相应函数实现相应功能（存入文件），
# 模板图如下。每次对学生管理系统发生改动，要写入改动点到log.txt文本中

def add_stu():
    new_stu_name = input("请输入姓名：")
    new_stu_sex = input("性别：")
    new_stu_age = input("年龄：")
    new_stu_info = f"{new_stu_name},{new_stu_sex},{new_stu_age}\n"
    with open('students', 'a', encoding='utf-8') as f:
        f.write(new_stu_info)
    print(f"{new_stu_name}添加成功")

def del_stu():
    stu_to_del = input("请输入要删除的学生姓名：")
    stu_list= []
    deleted = False
    with open('students.txt', 'r', encoding='utf-8') as f:
        for stu in f:
            stu_list.append(stu.strip())
    with open('students.txt', 'w', encoding='utf-8') as f:
        for stu in stu_list:
            if stu:
                name = stu.split(',')[0]
                if name != stu_to_del:
                    f.write(stu + '\n')
                else:
                    deleted = True
    if deleted:
        print(f"{stu_to_del}删除成功")
    else:
        print(f"未找到名为{stu_to_del}的学生")


def modify_stu():
    stu_to_modify = input("请输入要修改的学生姓名：")
    stu_list = []
    modified = False
    with open('students.txt', 'r', encoding='utf-8') as f:
        for stu in f:
            stu_list.append(stu.strip())
    with open('students.txt', 'w', encoding='utf-8') as f:
        for stu in stu_list:
            if stu:
                name, sex, age = stu.split(',')
                if name == stu_to_modify:
                    print(f"当前信息：姓名：{name}，性别：{sex}，年龄：{age}")
                    new_name = input("请输入新姓名（不修改按回车）：").strip() or name
                    new_sex = input("请输入新性别（不修改按回车）：").strip() or sex
                    new_age = input("请输入新年龄（不修改按回车）：").strip() or age
                    if new_age and not new_age.isdigit():
                        print("年龄必须是数字！修改失败")
                        f.write(stu + '\n')
                        return
                    f.write(f"{new_name},{new_sex},{new_age}\n")
                    modified = True
                else:
                    f.write(stu + '\n')
    if modified:
        print("修改成功")
    else:
        print(f"未找到名为{stu_to_modify}的学生")

def show_stu():
    print("\n===== 学生信息列表 =====")
    with open('students.txt', 'r', encoding='utf-8') as f:
        students = [line.strip() for line in f if line.strip()]

    if not students:
        print("暂无学生信息")
    else:
        print(f"{'姓名':<10} {'性别':<5} {'年龄':<5}")
        print("-" * 25)
        for stu in students:
            name, sex, age = stu.split(',')
            print(f"{name:<10} {sex:<5} {age:<5}")
    print("=======================\n")

def main():
    while True:
       print("1.添加学生信息"
             "2.删除学生信息"
             "3.修改学生信息"
             "4.显示学生信息"
             "5.退出系统")
       i = int(input())
       if i ==1:
           add_stu()
       elif i==2:
           del_stu()
       elif i==3:
           modify_stu()
       elif i==4:
           show_stu()
       elif i==5:
           print("已退出系统")
           break
main()








# 8、如今的社交软件层出不穷，虽然功能千变万化，但都具有好友管理系统的基本功能，包括添加好友、删除好友、备注好友、展示好友等。
# 下面是一个简单的好友管理系统的功能菜单（存入文件） 好友管理系统中有5个功能，每个功能都对应一个序号，用户可根据提示“请输入您的选项”选择序号执行相应的操作，
# 包括： 添加好友：用户根据提示“请输入要添加的好友：”输入要添加好友的姓名，添加后会提示“好友添加成功”。
# 删除好友：用户根据提示“请输入删除好友姓名：”输入要删除好友的姓名，删除后提示“删除成功”
# 备注好友：用户根据提示“请输入要修改的好友姓名：”和“请输入修改后的好友姓名：”分别输入修改前和修改后的好友姓名，修改后会提示“备注成功”。
# 展示好友：若用户还没有添加过好友，提示“好友列表为空”，否则返回每个好友的姓名。
# 退出：关闭好友管理系统。 本任务要求编写程序，模拟实现如上所述的好友管理系统。
# 文件读取要使用相对路径，确保在任何的电脑、终端都可以运行



















































